package com.foreknow.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * 实现自定义过滤器主要用于处理字符编码集
 */
public class CharacterEncodingFilter implements Filter {
    private String encoding = "ISO8859-1";
    /**
     * web 应用程序启动时，web 服务器将创建Filter 的实例对象，并调用其init方法，
     * 读取web.xml配置，完成对象的初始化功能，从而为后续的用户请求作好拦截的准备工作（
     * filter对象只会创建一次，init方法也只会执行一次）。开发人员通过init方法的参数，
     * 可获得代表当前filter配置信息的FilterConfig对象。
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //初始化的方法
        //获取web.xml中配制的初始化参数
        encoding = filterConfig.getInitParameter("encoding");//utf-8
    }

    /**
     * 该方法完成实际的过滤操作，当客户端请求方法与过滤器设置匹配的URL时，Servlet容器将先调用过滤器的doFilter方法。
     * FilterChain用户访问后续过滤器。
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //过滤器的核心处理方法
        //设置服务器端向客户端响应的内容的类型(MIME) https://www.runoob.com/http/mime-types.html
        servletResponse.setContentType("text/html;charset=utf-8");
        //设置请求的字符编码集
        servletRequest.setCharacterEncoding("utf-8");
        //如果有后续过滤器就交给后续过滤器来处理，如果没有后续过滤器，就要将请求交给Servlet来处理
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        //销毁方法
    }
}
